home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / archives / com / internet / stik / gls002b5.zoo / gsdriver.c < prev    next >
C/C++ Source or Header  |  1997-09-13  |  2KB  |  125 lines

  1. #include <osbind.h>
  2. #include <mintbind.h>
  3. #include <basepage.h>
  4. #include <ctype.h>
  5. #include <minimal.h>
  6. #include <string.h>
  7. #include "cookie.h"
  8. #include "patchlev.h"
  9. #include "global.h"
  10. #include "pipe.h"
  11.  
  12. long _stksize = 65536L;
  13. int cjar_size = 0;
  14. COOKIE *new_cjar = 0;
  15. int ncookies = 0;
  16. int mint_present = 0;
  17. int stik_present = 0;
  18. int pipe_fd = 0;
  19.  
  20. #ifdef __MINT__
  21. /* We define these here to keep main.o from being pulled out of libc.a */
  22. int errno;
  23. int __mint;
  24. #endif
  25.  
  26.  
  27. int check_cookies(void)
  28. {
  29.   register COOKIE *cjar = *CJAR, *C;
  30.  
  31.   if (!cjar)
  32.     return 0;
  33.  
  34.   for (C = cjar; C->tag != 0; C++) {
  35.     if (C->tag == COOKIE_MiNT)
  36.       mint_present = 1;
  37.     if (C->tag == COOKIE_STiK)
  38.       stik_present = 1;
  39.   }
  40.  
  41.   cjar_size = C->value;
  42.   ncookies = C - cjar;
  43.   return 0;
  44. }
  45.  
  46. int install_same_jar(void)
  47. {
  48.   register COOKIE *C = *CJAR + ncookies;
  49.  
  50.   C->tag = COOKIE_STiK;
  51.   C->value = (long)&driver;
  52.   C[1].tag = 0;
  53.   C[1].value = cjar_size;
  54.   return 0;
  55. }
  56.  
  57. int install_new_jar(void)
  58. {
  59.   register COOKIE *oldC = *CJAR, *newC = new_cjar;
  60.  
  61.   *CJAR = newC;
  62.   while (oldC->tag != 0)
  63.     *newC++ = *oldC++;
  64.   newC->tag = COOKIE_STiK;
  65.   newC->value = (long)&driver;
  66.   newC[1].tag = 0;
  67.   newC[1].value = cjar_size + 8;
  68.   return 0;
  69. }
  70.  
  71. int install_cookie(void)
  72. {
  73.   if (ncookies < cjar_size - 1)
  74.     return Supexec(install_same_jar);
  75.   else {
  76.     if (!(new_cjar = (COOKIE *)Mxalloc((cjar_size + 8) * sizeof(COOKIE), 3))) {
  77.       Cconws("Unable to install STiK cookie\r\n");
  78.       return -1;
  79.     }
  80.     return Supexec(install_new_jar);
  81.   }
  82. }
  83.  
  84.  
  85. /* cleanup() -- free everything we might have alloced, and destroy all
  86.    semaphores we might have created. */
  87. static void cleanup(void)
  88. {
  89.   /* As it turns out, we have nothing to clean up here. */
  90. }
  91.  
  92.  
  93. int main()
  94. {
  95.   Cconws("\r\nGlueSTiK\277 STiK emulator for MiNTnet\r\n"
  96.      "Application interface driver\r\n"
  97.      "Version " GS_VERSION "\r\n"
  98.      "\275 1996 Scott Bigham\r\n");
  99.  
  100.  
  101.   Supexec(check_cookies);
  102.   if (!mint_present) {
  103.     Cconws("MiNT not present --- not installing\r\n");
  104.     return -1;
  105.   }
  106.   if (stik_present) {
  107.     Cconws("STiK already present --- not installing\r\n");
  108.     return 0;
  109.   }
  110.  
  111.   if (!init_stubs()) {
  112.     cleanup();
  113.     return -1;
  114.   }
  115.  
  116.   if (install_cookie() < 0) {
  117.     cleanup();
  118.     return -1;
  119.   }
  120.  
  121.   Cconws("\r\n");
  122.   Ptermres(1024L + _base->p_tlen + _base->p_dlen + _base->p_blen, 0);
  123.   return -1;
  124. }
  125.